package chapter01;

public class SwapPairs {
    //迭代
    public ListNode swapPairs(ListNode head) {
        ListNode listNode=new ListNode(-1);
        ListNode pre=listNode,cur,next;
        listNode.next=head;
        if(head==null||head.next==null){
            return head;
        }
        while(head!=null&&head.next!=null){
            cur=head;
            next=cur.next;
            cur.next=next.next;
            pre.next=next;
            next.next=cur;
            head=cur.next;
            pre=cur;
        }
        return listNode.next;
    }

    //递归
    public ListNode swapPairs1(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode next=head.next;
        ListNode after=next.next;
        next.next=head;
        head.next=swapPairs1(after);
        return next;
    }

    public static void main(String[] args) {
        ListNode listNode=new ListNode(1);
        ListNode p1=listNode;
        listNode.next=new ListNode(4);
        listNode=listNode.next;
        listNode.next=new ListNode(5);
        listNode=listNode.next;

        ListNode listNode1=new SwapPairs().swapPairs1(p1);
        while(listNode1!=null){
            System.out.print(listNode1.val+" ");
            listNode1=listNode1.next;
        }
    }
}
